package org.jsola.hr.helper;

import org.jsola.common.SafeKit;
import org.jsola.hr.constant.MantissaProcessingType;
import org.jsola.hr.dto.EmpSocItemAddDTO;
import org.jsola.hr.dto.EmpSocItemUpdateDTO;
import org.jsola.hr.entity.EmpSocItemDO;
import org.jsola.hr.query.EmpSocItemQuery;
import org.jsola.hr.service.IEmpSocItemService;
import org.jsola.hr.vo.EmpSocItemVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.math.BigDecimal;
import java.util.List;

import static org.jsola.hr.core.AbstractTest.SITE_ID;



/**
 * 员工参保信息表子项
 *
 * @author zhr
 */
@Component
public class EmpSocItemTestHelper extends BaseTestHelper {
    
    @Autowired
    private IEmpSocItemService empSocItemService;

    /**
     * 生成add测试数据
     * @return EmpSocItemAddDTO
     */
    public EmpSocItemAddDTO getEmpSocItemAddDTO(){
        EmpSocItemAddDTO empSocItemAddDTO = new EmpSocItemAddDTO();
        empSocItemAddDTO.setEmpSocId(getRandomValue("varchar",32));
        empSocItemAddDTO.setItemType(SafeKit.getInteger(getRandomValue("tinyint",4)));
        empSocItemAddDTO.setItemName(getRandomValue("varchar",255));
        empSocItemAddDTO.setCardinalityDefault(SafeKit.getBigDecimal(getRandomValue("decimal",11)));
        empSocItemAddDTO.setCardinalityMin(SafeKit.getBigDecimal(getRandomValue("decimal",11)));
        empSocItemAddDTO.setCardinalityMax(SafeKit.getBigDecimal(getRandomValue("decimal",11)));
        empSocItemAddDTO.setPersentCompany(SafeKit.getBigDecimal(getRandomValue("decimal",11)));
        empSocItemAddDTO.setPersentPersonal(SafeKit.getBigDecimal(getRandomValue("decimal",11)));
        empSocItemAddDTO.setAmountCompany(SafeKit.getBigDecimal(getRandomValue("decimal",11)));
        empSocItemAddDTO.setAmountPersonal(SafeKit.getBigDecimal(getRandomValue("decimal",11)));
        empSocItemAddDTO.setMantissaProcCompany(MantissaProcessingType.NOT_PROCESSING.getValue());
        empSocItemAddDTO.setMantissaProcPersonal(MantissaProcessingType.NOT_PROCESSING.getValue());
        empSocItemAddDTO.setSort(SafeKit.getInteger(getRandomValue("int",11)));
        empSocItemAddDTO.setItemRemark(getRandomValue("varchar",255));
        return empSocItemAddDTO;
    }


    /**
     * 生成update测试数据
     * @return EmpSocItemUpdateDTO
     */
    public EmpSocItemUpdateDTO getEmpSocItemUpdateDTO(EmpSocItemVO empSocItemVO){
        return empSocItemService.selectDOById(empSocItemVO.getId(), SITE_ID).to(EmpSocItemUpdateDTO.class);
    }

    /**
     * 生成查询数据
     * @return EmpSocItemQuery
     */
    public EmpSocItemQuery getEmpSocItemQuery() {
        EmpSocItemQuery empSocItemQuery = new EmpSocItemQuery();
        List<EmpSocItemDO> empSocItemDOList = empSocItemService.list(new EmpSocItemDO(),SITE_ID);
        if (!CollectionUtils.isEmpty(empSocItemDOList)) {
            EmpSocItemDO empSocItemDO = empSocItemDOList.get(0);
            empSocItemQuery = empSocItemDO.to(EmpSocItemQuery.class);
            if (empSocItemDO.getCardinalityDefault() != null) {
                empSocItemQuery.setCardinalityDefaultStart(empSocItemDO.getCardinalityDefault().subtract(new BigDecimal(1)));
                empSocItemQuery.setCardinalityDefaultEnd(empSocItemDO.getCardinalityDefault().add(new BigDecimal(1)));
            }
            if (empSocItemDO.getCardinalityMin() != null) {
                empSocItemQuery.setCardinalityMinStart(empSocItemDO.getCardinalityMin().subtract(new BigDecimal(1)));
                empSocItemQuery.setCardinalityMinEnd(empSocItemDO.getCardinalityMin().add(new BigDecimal(1)));
            }
            if (empSocItemDO.getCardinalityMax() != null) {
                empSocItemQuery.setCardinalityMaxStart(empSocItemDO.getCardinalityMax().subtract(new BigDecimal(1)));
                empSocItemQuery.setCardinalityMaxEnd(empSocItemDO.getCardinalityMax().add(new BigDecimal(1)));
            }
            if (empSocItemDO.getPersentCompany() != null) {
                empSocItemQuery.setPersentCompanyStart(empSocItemDO.getPersentCompany().subtract(new BigDecimal(1)));
                empSocItemQuery.setPersentCompanyEnd(empSocItemDO.getPersentCompany().add(new BigDecimal(1)));
            }
            if (empSocItemDO.getPersentPersonal() != null) {
                empSocItemQuery.setPersentPersonalStart(empSocItemDO.getPersentPersonal().subtract(new BigDecimal(1)));
                empSocItemQuery.setPersentPersonalEnd(empSocItemDO.getPersentPersonal().add(new BigDecimal(1)));
            }
            if (empSocItemDO.getAmountCompany() != null) {
                empSocItemQuery.setAmountCompanyStart(empSocItemDO.getAmountCompany().subtract(new BigDecimal(1)));
                empSocItemQuery.setAmountCompanyEnd(empSocItemDO.getAmountCompany().add(new BigDecimal(1)));
            }
            if (empSocItemDO.getAmountPersonal() != null) {
                empSocItemQuery.setAmountPersonalStart(empSocItemDO.getAmountPersonal().subtract(new BigDecimal(1)));
                empSocItemQuery.setAmountPersonalEnd(empSocItemDO.getAmountPersonal().add(new BigDecimal(1)));
            }
        }
        return empSocItemQuery;
    }

    /**
     * 保存示例
     * @return EmpSocItemVO
     */
    public EmpSocItemVO saveEmpSocItemExample(){
        EmpSocItemAddDTO addDTO = this.getEmpSocItemAddDTO();
        EmpSocItemVO empSocItemVO = empSocItemService.save(addDTO,buildTokenUser());
        return empSocItemVO;
    }


}

